package com.dragon.modules.yuegou.enums;

import com.fasterxml.jackson.annotation.JsonCreator;

import java.util.Map;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 悦商圈系统的应用类型枚举<br>
 * 
 * @author liuwu
 *
 */
public enum YsqAppType {

	// [全局枚举]应用：0-大运营后台-YSQ_PLATFORM、1-集团版后台-YSQ_GROUP、2-悦商圈APP安卓版-YSQ_APP_ANDROID、3-悦商圈APP
	// IOS版-YSQ_APP_IOS、4-悦商惠小程序-YSQ_MERCHANT_XCX、5-悦购小程序-YSQ_XCX、6-悦荷包小程序-YSQ_WALLET_XCX、7-悦商管小程序-YSQ_GROUP_XCX、7-悦商圈员工版小程序-YSQ_GROUP_EMPLOYEE_XCX
	/**
	 * 大运营后台
	 */
	YSQ_PLATFORM(0, "大运营后台", PrincipalType.SYSTEM),
	/**
	 * 集团版后台
	 */
	YSQ_GROUP(1, "集团版后台", PrincipalType.GROUP),
	/**
	 * 悦商圈APP安卓版
	 */
	YSQ_APP_ANDROID(2, "悦商圈APP安卓版", PrincipalType.MEMBER),
	/**
	 * 悦商圈APP IOS版
	 */
	YSQ_APP_IOS(3, "悦商圈APP IOS版", PrincipalType.MEMBER),
	/**
	 * 悦商惠
	 */
	YSQ_MERCHANT_XCX(4, "悦商惠小程序", PrincipalType.MERCHANT),
	/**
	 * 悦购
	 */
	YSQ_XCX(5, "悦购小程序", PrincipalType.MEMBER),
	/**
	 * 悦荷包
	 */
	YSQ_WALLET_XCX(6, "悦荷包小程序", PrincipalType.MEMBER),
	/**
	 * 悦商管
	 */
	YSQ_GROUP_XCX(7, "悦商管小程序", PrincipalType.GROUP),
	/**
	 * 悦商圈员工版小程序
	 */
	YSQ_GROUP_EMPLOYEE_XCX(8, "悦商圈员工版小程序", PrincipalType.GROUP),
	/**
	 * 商户版后台
	 */
	YSQ_MERCHANT(9, "商户版后台", PrincipalType.MERCHANT),

	/**
	 * 商户版后台
	 */
	YSQ_TCXDT(10, "天才想答题", PrincipalType.MEMBER),

	/**
	 * 支付宝小程序
	 */
	APL_XCX(11, "支付宝小程序", PrincipalType.MEMBER);

	/**
	 * 应用ID
	 */
	private final int typeId;

	/**
	 * 别名
	 */
	private final String alias;

	/**
	 * 可以访问应用的用户类型
	 */
	private final PrincipalType userType;

	private YsqAppType(int appId, String alias, PrincipalType userType) {
		this.typeId = appId;
		this.alias = alias;
		this.userType = userType;
	}

	public Integer getValue() {
		return typeId;
	}

	/**
	 * 枚举标识
	 *
	 * @return code
	 */
	public Integer getCode() {
		return typeId;
	}

	/**
	 * 应用别名
	 * 
	 * @return alias
	 */
	public String getAlias() {
		return alias;
	}

	/**
	 * 获取应用ID
	 * 
	 * @return 应用ID
	 */
	public int getTypeId() {
		return typeId;
	}

	/**
	 * 可以访问应用的用户类型
	 * 
	 * @return userType
	 */
	public PrincipalType getUserType() {
		return userType;
	}

	@JsonCreator
	public static YsqAppType from(int appId) {
		return CODE_MAP.get(appId);
	}

	private static final Map<Integer, YsqAppType> CODE_MAP = Stream.of(YsqAppType.values())
			.collect(Collectors.toMap(YsqAppType::getTypeId, UnaryOperator.identity()));

}
